﻿Imports System.Data
Imports System.Data.OleDb
Imports geraLaudosAutomatico.conexao
Imports System.Text

Public Class usuarioDAO

    Private sql As New StringBuilder
    Private i As Integer
   
    'Public Function getUsuarios() As Generic.List(Of usuarioVO)

    '    Dim usuario As New usuarioVO
    '    Dim objConn As New conexao
    '    sql.Clear()
    '    sql.Append("SELECT *FROM USUARIO ORDER BY NOME")

    '    Dim oReader As OleDbDataReader

    '    Dim lista As New Generic.List(Of usuarioVO)


    '    Try
    '        Dim oComando As New OleDbCommand(sql.ToString, objConn.abreConexao)

    '        oReader = oComando.ExecuteReader

    '        While oReader.Read

    '            usuario = New usuarioVO
    '            usuario.ID_USUARIO = IIf(IsDBNull(oReader("ID_USUARIO")), Nothing, oReader("ID_USUARIO"))
    '            usuario.SENHA = IIf(IsDBNull(oReader("SENHA")), Nothing, oReader("SENHA"))
    '            usuario.NOME = IIf(IsDBNull(oReader("NOME")), Nothing, oReader("NOME"))
    '            usuario.MASP = IIf(IsDBNull(oReader("MASP")), Nothing, oReader("MASP"))
    '            usuario.SECAO = IIf(IsDBNull(oReader("ID_SECAO")), Nothing, secao.getSecao(oReader("ID_SECAO")))
    '            usuario.CARGO = IIf(IsDBNull(oReader("ID_SECAO")), Nothing, cargo.getCargo(oReader("ID_CARGO")))
    '            usuario.STATUS = IIf(IsDBNull(oReader("STATUS")), Nothing, oReader("STATUS"))
    '            usuario.SINCRONIZADO = IIf(IsDBNull(oReader("SINCRONIZADO")), Nothing, oReader("SINCRONIZADO"))
    '            usuario.TIPO_USUARIO = IIf(IsDBNull(oReader("ID_TIPO_USUARIO")), Nothing, tipo_usario.getTipoUsuario(oReader("ID_TIPO_USUARIO")))
    '            lista.Add(usuario)

    '        End While

    '        Return lista

    '    Catch ex As Exception

    '        Throw ex

    '    Finally

    '        objConn.fechaConexao()

    '    End Try

    'End Function

    '------------------------------------------------------------------------------------------------
    ' TRAZ TODOS OS PERITOS CADASTRADOS NA BASE DE DADOS. SE ID_SECAO <> 0 TRAZ APENAS OS PERITOS DA SEÇÃO
    '------------------------------------------------------------------------------------------------

    Public Function getUsuariosSecao(Optional ByVal ID_SECAO = 0) As Generic.List(Of usuarioVO)

        Dim usuario As New usuarioVO
        Dim objConn As New conexao
        Dim item As New usuarioVO

        item.ID_USUARIO = -1
        item.NOME = "Selecione"
        sql.Clear()
        sql.Append("SELECT U.*,S.*,C.*, TU.* FROM tipo_usuario TU INNER JOIN (secao S INNER JOIN (cargo C INNER JOIN usuario U ON C.id_cargo = U.id_cargo) ON S.id_secao = U.id_secao) ON TU.id_tipo_usuario = U.id_tipo_usuario WHERE U.STATUS=TRUE AND U.ID_CARGO=1 AND (U.ID_TIPO_USUARIO=1 OR U.ID_TIPO_USUARIO=2 )")

        '        SELECT a.id_usuario, a.nome, a.masp, a.id_cargo, a.id_tipo_usuario, a.senha, a.id_secao, c.desc_cargo, d.desc_tipo_usuario
        ' FROM usuario a, secao b, cargo c, tipo_usuario d WHERE a.id_secao=b.id_secao 
        'AND a.id_tipo_usuario = d.id_tipo_usuario AND a.id_cargo=c.id_cargo AND b.status=true AND a.status=true ORDER BY a.nome

        If ID_SECAO > 0 Then

            sql.Append(" AND S.STATUS=TRUE")

        End If

        sql.Append(" ORDER BY U.NOME")

        Dim oReader As OleDbDataReader

        Dim lista As New Generic.List(Of usuarioVO)

        'lista.Add(item)
        Try
            Dim oComando As New OleDbCommand(sql.ToString, objConn.abreConexao)

            'If ID_SECAO > 0 Then

            '    oComando.Parameters.AddWithValue("@ID_SECAO", ID_SECAO)

            'End If

            oReader = oComando.ExecuteReader

            While oReader.Read
                usuario = New usuarioVO
                usuario.ID_USUARIO = IIf(IsDBNull(oReader("ID_USUARIO")), Nothing, oReader("ID_USUARIO"))
                usuario.NOME = IIf(IsDBNull(oReader("NOME")), Nothing, oReader("NOME"))
                usuario.SENHA = IIf(IsDBNull(oReader("SENHA")), Nothing, oReader("SENHA"))
                usuario.MASP = IIf(IsDBNull(oReader("MASP")), Nothing, oReader("MASP"))
                usuario.SECAO = IIf(IsDBNull(oReader("S.ID_SECAO")), Nothing, New secaoVO With {.ID_SECAO = oReader("S.ID_SECAO"), .DESC_SECAO = oReader("DESC_SECAO"), .STATUS = oReader("S.STATUS")})
                usuario.CARGO = IIf(IsDBNull(oReader("C.ID_CARGO")), Nothing, New cargoVO With {.ID_CARGO = oReader("C.ID_CARGO"), .DESC_CARGO = oReader("DESC_CARGO"), .STATUS = oReader("C.STATUS")})
                usuario.STATUS = IIf(IsDBNull(oReader("U.STATUS")), Nothing, oReader("U.STATUS"))
                usuario.TIPO_USUARIO = IIf(IsDBNull(oReader("TU.ID_TIPO_USUARIO")), Nothing, New tipo_usuarioVO With {.ID_TIPO_USUARIO = oReader("TU.ID_TIPO_USUARIO"), .DESC_TIPO_USUARIO = oReader("DESC_TIPO_USUARIO")})
                usuario.ALTERACAO = IIf(IsDBNull(oReader("ALTERACAO")), Nothing, oReader("ALTERACAO"))
                lista.Add(usuario)

            End While

            Return lista

        Catch ex As Exception

            Throw ex

        Finally

            objConn.fechaConexao()

        End Try

    End Function


    Public Function getUsuario(ByVal id_usuario As Integer) As usuarioVO

        Dim usuario As New usuarioVO
        Dim objConn As New conexao
        sql.Clear()
        sql.Append("SELECT *FROM tipo_usuario INNER JOIN (secao INNER JOIN (cargo INNER JOIN usuario ON cargo.id_cargo = usuario.id_cargo) ON secao.id_secao = usuario.id_secao) ON tipo_usuario.id_tipo_usuario = usuario.id_tipo_usuario WHERE ID_USUARIO=@ID_USUARIO order by usuario.nome")

        Dim oReader As OleDbDataReader

        Dim lista As New Generic.List(Of usuarioVO)

        Try
            Dim oComando As New OleDbCommand(sql.ToString, objConn.abreConexao)

            oComando.Parameters.AddWithValue("@ID_USUARIO", id_usuario)

            oReader = oComando.ExecuteReader

            While oReader.Read

                usuario = New usuarioVO
                usuario.ID_USUARIO = IIf(IsDBNull(oReader("ID_USUARIO")), Nothing, oReader("ID_USUARIO"))
                usuario.SENHA = IIf(IsDBNull(oReader("SENHA")), Nothing, oReader("SENHA"))
                usuario.NOME = IIf(IsDBNull(oReader("NOME")), Nothing, oReader("NOME"))
                usuario.MASP = IIf(IsDBNull(oReader("MASP")), Nothing, oReader("MASP"))
                usuario.SECAO = IIf(IsDBNull(oReader("SECAO.ID_SECAO")), Nothing, New secaoVO With {.ID_SECAO = oReader("SECAO.ID_SECAO"), .DESC_SECAO = oReader("DESC_SECAO"), .STATUS = oReader("SECAO.STATUS")})
                usuario.CARGO = IIf(IsDBNull(oReader("CARGO.ID_CARGO")), Nothing, New cargoVO With {.ID_CARGO = oReader("CARGO.ID_SECAO"), .DESC_CARGO = oReader("DESC_CARGO"), .STATUS = oReader("CARGO.STATUS")})
                usuario.STATUS = IIf(IsDBNull(oReader("USUARIO.STATUS")), Nothing, oReader("STATUS"))
                usuario.TIPO_USUARIO = IIf(IsDBNull(oReader("TIPO_USUARIO.ID_TIPO_USUARIO")), Nothing, New tipo_usuarioVO With {.ID_TIPO_USUARIO = oReader("TIPO_USUARIO.ID_TIPO_USUARIO"), .DESC_TIPO_USUARIO = oReader("DESC_TIPO_USUARIO")})
                usuario.ALTERACAO = IIf(IsDBNull(oReader("ALTERACAO")), Nothing, oReader("ALTERACAO"))
            End While

            Return usuario

        Catch ex As Exception

            Throw ex

        Finally

            objConn.fechaConexao()

        End Try
    End Function

    Public Function getLogin(ByVal ID_USUARIO As Integer, ByVal senha As String) As usuarioVO

        Dim usuario As New usuarioVO
        Dim objConn As New conexao

        sql.Clear()
        sql.Append("SELECT U.*,S.*,C.*, TU.* FROM tipo_usuario TU INNER JOIN (secao S INNER JOIN (cargo C INNER JOIN usuario U ON C.id_cargo = U.id_cargo) ON S.id_secao = U.id_secao) ON TU.id_tipo_usuario = U.id_tipo_usuario WHERE U.ID_USUARIO =@ID_USUARIO AND U.SENHA=@SENHA")


        Dim oReader As OleDbDataReader
        Dim logou As Boolean = False
        Dim lista As New Generic.List(Of usuarioVO)

        Try
            Dim oComando As New OleDbCommand(sql.ToString, objConn.abreConexao)
            oComando.Parameters.AddWithValue("@ID_USUARIO", ID_USUARIO)
            oComando.Parameters.AddWithValue("@SENHA", senha)
            oReader = oComando.ExecuteReader

            If oReader.HasRows Then


                While oReader.Read

                    usuario = New usuarioVO
                    usuario.ID_USUARIO = IIf(IsDBNull(oReader("ID_USUARIO")), Nothing, oReader("ID_USUARIO"))
                    usuario.NOME = IIf(IsDBNull(oReader("NOME")), Nothing, oReader("NOME"))
                    usuario.SENHA = IIf(IsDBNull(oReader("SENHA")), Nothing, oReader("SENHA"))
                    usuario.MASP = IIf(IsDBNull(oReader("MASP")), Nothing, oReader("MASP"))
                    usuario.SECAO = IIf(IsDBNull(oReader("S.ID_SECAO")), Nothing, New secaoVO With {.ID_SECAO = oReader("S.ID_SECAO"), .DESC_SECAO = oReader("DESC_SECAO"), .STATUS = oReader("S.STATUS")})
                    usuario.CARGO = IIf(IsDBNull(oReader("C.ID_CARGO")), Nothing, New cargoVO With {.ID_CARGO = oReader("C.ID_CARGO"), .DESC_CARGO = oReader("DESC_CARGO"), .STATUS = oReader("C.STATUS")})
                    usuario.STATUS = IIf(IsDBNull(oReader("U.STATUS")), Nothing, oReader("U.STATUS"))
                    usuario.TIPO_USUARIO = IIf(IsDBNull(oReader("TU.ID_TIPO_USUARIO")), Nothing, New tipo_usuarioVO With {.ID_TIPO_USUARIO = oReader("TU.ID_TIPO_USUARIO"), .DESC_TIPO_USUARIO = oReader("DESC_TIPO_USUARIO")})
                    usuario.ALTERACAO = IIf(IsDBNull(oReader("ALTERACAO")), Nothing, oReader("ALTERACAO"))

                End While

            Else

                usuario = Nothing

            End If


            Return usuario

        Catch ex As Exception

            Throw ex

        Finally

            objConn.fechaConexao()

        End Try

    End Function



End Class
